import axios from 'axios';
import {
	Message
} from 'element-ui';
import store from '../store';


// 创建axios实例
let api_url = "", Sys = {}, ua = navigator.userAgent.toLowerCase(), s, l = window.location;
    (s = ua.match(/rv:([\d.]+)\) like gecko/)) ? Sys.ie = s[1] :
    (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] : 0;
    if(Sys.ie) {
        api_url = l.protocol + '//' + l.host;
    }else{
        api_url = l.origin;
    }
const service = axios.create({
    baseURL: api_url + '/api/',
    timeout: 300000,
	withCredentials: true, // 携带session
});

service.interceptors.request.use(config => {
		config.method === 'post' ? config.data = {
			...config.data
		} : config.params = {
			...config.params
		};
		let url = config.url;
		// get参数编码
		if (config.method === 'get' && config.params) {
			url += '?';
			let keys = Object.keys(config.params);
			for (let key of keys) {
				url += `${key}=${encodeURIComponent(config.params[key])}&`
			}
			url = url.substring(0, url.length - 1);
			config.params = {}
		}
		config.url = url;
        return config;
	},
	error => { //请求错误处理
		console.error('请求参数错误处理::', error);
		Promise.reject(error);
	}
);

service.interceptors.response.use(
	response => {
		if (response.status === 200 && Number(response.data.code) === 0 || response.data.result == 0) return response;

		if (response.data instanceof Object && !(response.data instanceof Array) && 'error' in response.data) {
			Message({
				message: response.data['detail'],
				type: 'error',
				duration: 5 * 1000
			});
           return false;
		} else {
			return response;
		}
	}, error => {
		if (error && error.response) {
			switch (error.response.status) {
				case 400:
					error.message = '错误请求';
					break;
				case 401:
					error.message = '未授权，请重新登录';
					break;
				case 403:
					error.message = '拒绝访问';
					break;
				case 404:
					error.message = '请求错误,未找到该资源';
					break;
				case 405:
					error.message = '请求方法未允许';
					break;
				case 408:
					error.message = '请求超时';
					break;
				case 500:
					error.message = '服务器开小差了,请稍后重试';
					break;
				case 501:
					error.message = '网络未实现';
					break;
				case 502:
					error.message = '网络错误';
					break;
				case 503:
					error.message = '服务不可用';
					break;
				case 504:
					error.message = '网络超时';
					break;
				case 505:
					error.message = 'http版本不支持该请求';
					break;
				default:
					error.message = `连接错误${error.response.status}`;
			}
			Message({
                message: error.response.data['message'] ? error.response.data['message'] : error['message'],
                type: 'error',
                duration: 5 * 1000
            });
            if (error.response.status == 401) {
                store.dispatch("LogOut");
            }
            return Promise.reject(error);
		}
	}
);

export default service;
